// ==UserScript==
// @name         禅道对应Trac链接跳转按钮
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  找到内容为"关键词"的th标签，获取其相邻td中的链接并添加跳转按钮
// @author       您的名字
// @match        https://zentao.bokesoft.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 配置参数
    const TH_TEXT = '关键词';
    const URL_PREFIX = 'http://dev.bokesoft.com:8000/trac/eri-erp/ticket/';

    // 查找符合条件的元素
    function findTargetLink() {
        // 获取所有th标签并筛选出内容为"关键词"的元素
        const keywordThElements = Array.from(document.getElementsByTagName('th'))
            .filter(th => th.textContent.trim() === TH_TEXT);

        // 遍历每个找到的th元素
        for (const th of keywordThElements) {
            // 获取当前th的下一个同级元素
            let nextSibling = th.nextSibling;

            // 寻找下一个同级的td元素
            while (nextSibling) {
                // 检查是否是td元素
                if (nextSibling.tagName && nextSibling.tagName.toLowerCase() === 'td') {
                    // 获取td的文本内容
                    const tdContent = nextSibling.textContent.trim();

                    // 检查内容是否以目标URL前缀开头
                    if (tdContent.startsWith(URL_PREFIX)) {
                        return tdContent;
                    }
                    break; // 找到td后退出循环
                }

                // 继续查找下一个同级元素
                nextSibling = nextSibling.nextSibling;
            }
        }

        return null;
    }

    // 创建悬浮按钮
    function createFloatingButton(link) {
        // 如果已存在按钮则移除
        const existingBtn = document.getElementById('keyword-link-button');
        if (existingBtn) {
            existingBtn.remove();
        }

        // 创建按钮元素
        const button = document.createElement('button');
        button.id = 'keyword-link-button';
        button.textContent = '跳转至Trac';
        button.title = '点击跳转到对应的工单页面';

        // 设置按钮样式
        button.style.position = 'fixed';
        button.style.right = '20px';
        button.style.top = '80%';
        button.style.transform = 'translateY(-50%)';
        button.style.zIndex = '9999';
        button.style.padding = '12px 16px';
        button.style.backgroundColor = '#4CAF50';
        button.style.color = 'white';
        button.style.border = 'none';
        button.style.borderRadius = '6px';
        button.style.cursor = 'pointer';
        button.style.boxShadow = '0 4px 8px rgba(0,0,0,0.2)';
        button.style.fontSize = '14px';
        button.style.transition = 'all 0.3s ease';

        // 鼠标悬停效果
        button.addEventListener('mouseover', () => {
            button.style.backgroundColor = '#45a049';
            button.style.transform = 'translateY(-50%) scale(1.05)';
        });

        button.addEventListener('mouseout', () => {
            button.style.backgroundColor = '#4CAF50';
            button.style.transform = 'translateY(-50%)';
        });

        // 点击事件 - 跳转到链接
        button.addEventListener('click', () => {
            window.open(link, '_blank');
        });

        // 添加到页面
        document.body.appendChild(button);
    }

    // 主函数
    function init() {
        const targetLink = findTargetLink();

        if (targetLink) {
            console.log('找到目标链接:', targetLink);
            createFloatingButton(targetLink);
        } else {
            console.log('未找到符合条件的链接');
        }
    }

    // 页面加载完成后执行
    if (document.readyState === 'complete') {
        init();
    } else {
        window.addEventListener('load', init);
    }

    // 监视DOM变化，处理动态加载的内容
    const observer = new MutationObserver((mutations) => {
        mutations.forEach(() => {
            const targetLink = findTargetLink();
            if (targetLink) {
                createFloatingButton(targetLink);
                observer.disconnect(); // 找到后停止监视
            }
        });
    });

    // 开始监视DOM变化
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();
